home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 2003 August / MW 8 2003 CD1.iso / Inside Macworld / Product News / gimp-1.2.4.sit / gimp-1.2.4 / plug-ins / perl / examples / fade-alpha < prev    next >
Encoding:
Text File  |  2000-11-20  |  20.6 KB  |  1,066 lines

  1. #!/usr/bin/perl -w
  2.  
  3. use Gtk;
  4. use Gtk::Atoms;
  5. use Gimp qw(:auto);
  6.  
  7. use strict 'vars';
  8.  
  9. # Gimp::set_trace(TRACE_ALL);
  10.  
  11. ###
  12. # Globals
  13. ###
  14. my ($direction, $cancelFlag);
  15. my ($plugin) = "plug_in_AlphaFade";
  16.  
  17. # XPM's that I removed the $ and the @'s from (they get intrepreted in 
  18. # strings, which makes for nasty problems).
  19. my @arr = (
  20. ["24 24 66 1",
  21. "     c None",
  22. ".    c #A0A0A0",
  23. "+    c #A2A2A2",
  24. "X    c #787878",
  25. "#    c #7B7B7B",
  26. "Z    c #A8A8A8",
  27. "%    c #AAAAAA",
  28. "&    c #848484",
  29. "*    c #868686",
  30. "=    c #B0B0B0",
  31. "-    c #B2B2B2",
  32. ";    c #8F8F8F",
  33. ">    c #929292",
  34. ",    c #B8B8B8",
  35. "'    c #BABABA",
  36. ")    c #9B9B9B",
  37. "!    c #9E9E9E",
  38. "~    c #C0C0C0",
  39. "{    c #C2C2C2",
  40. "]    c #A7A7A7",
  41. "^    c #C7C7C7",
  42. "/    c #C9C9C9",
  43. "(    c #B3B3B3",
  44. "_    c #B5B5B5",
  45. ":    c #A4A4A4",
  46. "<    c #7E7E7E",
  47. "[    c #ACACAC",
  48. "}    c #898989",
  49. "|    c #B4B4B4",
  50. "1    c #959595",
  51. "2    c #BCBCBC",
  52. "3    c #A1A1A1",
  53. "4    c #C3C3C3",
  54. "5    c #ADADAD",
  55. "6    c #CCCCCC",
  56. "7    c #CFCFCF",
  57. "8    c #D2D2D2",
  58. "9    c #D3D3D3",
  59. "0    c #BEBEBE",
  60. "a    c #C1C1C1",
  61. "b    c #C4C4C4",
  62. "c    c #D8D8D8",
  63. "d    c #D9D9D9",
  64. "e    c #DBDBDB",
  65. "f    c #CACACA",
  66. "g    c #CDCDCD",
  67. "h    c #D0D0D0",
  68. "i    c #DFDFDF",
  69. "j    c #E1E1E1",
  70. "k    c #E3E3E3",
  71. "l    c #D6D6D6",
  72. "m    c #DCDCDC",
  73. "n    c #E7E7E7",
  74. "o    c #E9E9E9",
  75. "p    c #EBEBEB",
  76. "q    c #E2E2E2",
  77. "r    c #E4E4E4",
  78. "s    c #EFEFEF",
  79. "t    c #F1F1F1",
  80. "u    c #F3F3F3",
  81. "v    c #EDEDED",
  82. "w    c #F0F0F0",
  83. "x    c #F7F7F7",
  84. "y    c #F9F9F9",
  85. "z    c #FBFBFB",
  86. "W      c #000000",
  87. "WWWWWWWWWWWWWWWWWWWWWWWW",
  88. "W:#<%[*}-|>1'2!3{4%5/6_W",
  89. "W#Z%&*=-;>,')!~{]%^/(_7W",
  90. "W<%[*}-|>1'2!3{4%5/6_,8W",
  91. "W%&*=-;>,')!~{]%^/(_780W",
  92. "W[*}-|>1'2!3{4%5/6_,89aW",
  93. "W*=-;>,')!~{]%^/(_780acW",
  94. "W}-|>1'2!3{4%5/6_,89abdW",
  95. "W-;>,')!~{]%^/(_780acdfW",
  96. "W|>1'2!3{4%5/6_,89abdegW",
  97. "W>,')!~{]%^/(_780acdfgiW",
  98. "W1'2!3{4%5/6_,89abdeghjW",
  99. "W')!~{]%^/(_780acdfgijlW",
  100. "W2!3{4%5/6_,89abdeghjkdW",
  101. "W!~{]%^/(_780acdfgijldnW",
  102. "W3{4%5/6_,89abdeghjkdmoW",
  103. "W{]%^/(_780acdfgijldnoqW",
  104. "W4%5/6_,89abdeghjkdmoprW",
  105. "W%^/(_780acdfgijldnoqrsW",
  106. "W5/6_,89abdeghjkdmoprntW",
  107. "W/(_780acdfgijldnoqrstvW",
  108. "W6_,89abdeghjkdmoprntuwW",
  109. "W_780acdfgijldnoqrstvwxW",
  110. "WWWWWWWWWWWWWWWWWWWWWWWW"
  111. ],
  112. ["24 24 47 1",
  113. "     c None",
  114. ".    c #A0A0A0",
  115. "+    c #A4A4A4",
  116. "X    c #7E7E7E",
  117. "#    c #848484",
  118. "Z    c #B0B0B0",
  119. "%    c #B4B4B4",
  120. "&    c #959595",
  121. "*    c #9B9B9B",
  122. "=    c #C0C0C0",
  123. "-    c #C3C3C3",
  124. ";    c #ADADAD",
  125. ">    c #B3B3B3",
  126. ",    c #CFCFCF",
  127. "'    c #D3D3D3",
  128. ")    c #C4C4C4",
  129. "!    c #CACACA",
  130. "~    c #DFDFDF",
  131. "{    c #E3E3E3",
  132. "]    c #DCDCDC",
  133. "^    c #E2E2E2",
  134. "/    c #EFEFEF",
  135. "(    c #F3F3F3",
  136. "_    c #F9F9F9",
  137. ":    c #727272",
  138. "<    c #787878",
  139. "[    c #A8A8A8",
  140. "}    c #ACACAC",
  141. "|    c #898989",
  142. "1    c #8F8F8F",
  143. "2    c #B8B8B8",
  144. "3    c #BCBCBC",
  145. "4    c #A1A1A1",
  146. "5    c #A7A7A7",
  147. "6    c #C7C7C7",
  148. "7    c #CCCCCC",
  149. "8    c #BEBEBE",
  150. "9    c #D8D8D8",
  151. "0    c #DBDBDB",
  152. "a    c #D0D0D0",
  153. "b    c #D6D6D6",
  154. "c    c #E7E7E7",
  155. "d    c #EBEBEB",
  156. "e    c #EDEDED",
  157. "f    c #F7F7F7",
  158. "g    c #FBFBFB",
  159. "W      c #000000",
  160. "WWWWWWWWWWWWWWWWWWWWWWWW",
  161. "W+X#Z%&*=-;>,')!~{]^/((W",
  162. "W<[}|12345672890abcdcefW",
  163. "W<[}|12345672890abcdcefW",
  164. "W+X#Z%&*=-;>,')!~{]^/((W",
  165. "W+X#Z%&*=-;>,')!~{]^/((W",
  166. "W<[}|12345672890abcdcefW",
  167. "W<[}|12345672890abcdcefW",
  168. "W+X#Z%&*=-;>,')!~{]^/((W",
  169. "W+X#Z%&*=-;>,')!~{]^/((W",
  170. "W<[}|12345672890abcdcefW",
  171. "W<[}|12345672890abcdcefW",
  172. "W+X#Z%&*=-;>,')!~{]^/((W",
  173. "W+X#Z%&*=-;>,')!~{]^/((W",
  174. "W<[}|12345672890abcdcefW",
  175. "W<[}|12345672890abcdcefW",
  176. "W+X#Z%&*=-;>,')!~{]^/((W",
  177. "W+X#Z%&*=-;>,')!~{]^/((W",
  178. "W<[}|12345672890abcdcefW",
  179. "W<[}|12345672890abcdcefW",
  180. "W+X#Z%&*=-;>,')!~{]^/((W",
  181. "W+X#Z%&*=-;>,')!~{]^/((W",
  182. "W<[}|12345672890abcdcefW",
  183. "WWWWWWWWWWWWWWWWWWWWWWWW"
  184. ],
  185. ["24 24 65 1",
  186. "     c None",
  187. ".    c #CFCFCF",
  188. "+    c #D2D2D2",
  189. "X    c #BEBEBE",
  190. "#    c #C1C1C1",
  191. "Z    c #D8D8D8",
  192. "%    c #D9D9D9",
  193. "&    c #CACACA",
  194. "*    c #CDCDCD",
  195. "=    c #DFDFDF",
  196. "-    c #E1E1E1",
  197. ";    c #D6D6D6",
  198. ">    c #E7E7E7",
  199. ",    c #E9E9E9",
  200. "'    c #E2E2E2",
  201. ")    c #E4E4E4",
  202. "!    c #EFEFEF",
  203. "~    c #F1F1F1",
  204. "{    c #EDEDED",
  205. "]    c #F0F0F0",
  206. "^    c #F7F7F7",
  207. "/    c #F9F9F9",
  208. "(    c #FCFCFC",
  209. "_    c #BCBCBC",
  210. ":    c #D5D5D5",
  211. "<    c #C7C7C7",
  212. "[    c #DDDDDD",
  213. "}    c #D3D3D3",
  214. "|    c #E5E5E5",
  215. "1    c #DEDEDE",
  216. "2    c #EBEBEB",
  217. "3    c #F5F5F5",
  218. "4    c #F6F6F6",
  219. "5    c #B3B3B3",
  220. "6    c #B5B5B5",
  221. "7    c #AFAFAF",
  222. "8    c #C9C9C9",
  223. "9    c #C6C6C6",
  224. "0    c #A7A7A7",
  225. "a    c #AAAAAA",
  226. "b    c #A4A4A4",
  227. "c    c #C0C0C0",
  228. "d    c #C2C2C2",
  229. "e    c #BDBDBD",
  230. "f    c #9B9B9B",
  231. "g    c #9E9E9E",
  232. "h    c #989898",
  233. "i    c #B8B8B8",
  234. "j    c #BABABA",
  235. "k    c #B6B6B6",
  236. "l    c #8F8F8F",
  237. "m    c #929292",
  238. "n    c #8D8D8D",
  239. "o    c #B0B0B0",
  240. "p    c #B2B2B2",
  241. "q    c #AEAEAE",
  242. "r    c #848484",
  243. "s    c #868686",
  244. "t    c #808080",
  245. "u    c #A8A8A8",
  246. "v    c #A6A6A6",
  247. "w    c #787878",
  248. "x    c #7B7B7B",
  249. "y    c #757575",
  250. "W      c #000000",
  251. "WWWWWWWWWWWWWWWWWWWWWWWW",
  252. "W._X:Z<&[=};|>1'{!2{3^4W",
  253. "W6.+X#Z%&*=-;%>,')!~{]^W",
  254. "W5*._X:Z<&[=};|>1'{!2{3W",
  255. "W856.+X#Z%&*=-;%>,')!~{W",
  256. "W<75*._X:Z<&[=};|>1'{!2W",
  257. "Wa<856.+X#Z%&*=-;%>,')!W",
  258. "W09<75*._X:Z<&[=};|>1'{W",
  259. "Wd0a<856.+X#Z%&*=-;%>,'W",
  260. "Wcb09<75*._X:Z<&[=};|>1W",
  261. "Wgcd0a<856.+X#Z%&*=-;%>W",
  262. "Wfecb09<75*._X:Z<&[=};|W",
  263. "Wjfgcd0a<856.+X#Z%&*=-;W",
  264. "Wihfecb09<75*._X:Z<&[=}W",
  265. "Wmijfgcd0a<856.+X#Z%&*=W",
  266. "Wlkihfecb09<75*._X:Z<&[W",
  267. "Wplmijfgcd0a<856.+X#Z%&W",
  268. "Wonlkihfecb09<75*._X:Z<W",
  269. "Wsoplmijfgcd0a<856.+X#ZW",
  270. "Wrqonlkihfecb09<75*._X:W",
  271. "Warsoplmijfgcd0a<856.+XW",
  272. "Wutrqonlkihfecb09<75*._W",
  273. "Wxuarsoplmijfgcd0a<856.W",
  274. "WWWWWWWWWWWWWWWWWWWWWWWW"
  275. ],
  276. [ "24 24 47 1",
  277. "     c None",
  278. ".    c #A0A0A0",
  279. "+    c #727272",
  280. "X    c #A4A4A4",
  281. "#    c #787878",
  282. "Z    c #7E7E7E",
  283. "%    c #A8A8A8",
  284. "&    c #848484",
  285. "*    c #ACACAC",
  286. "=    c #B0B0B0",
  287. "-    c #898989",
  288. ";    c #B4B4B4",
  289. ">    c #8F8F8F",
  290. ",    c #959595",
  291. "'    c #B8B8B8",
  292. ")    c #9B9B9B",
  293. "!    c #BCBCBC",
  294. "~    c #C0C0C0",
  295. "{    c #A1A1A1",
  296. "]    c #C3C3C3",
  297. "^    c #A7A7A7",
  298. "/    c #ADADAD",
  299. "(    c #C7C7C7",
  300. "_    c #B3B3B3",
  301. ":    c #CCCCCC",
  302. "<    c #CFCFCF",
  303. "[    c #D3D3D3",
  304. "}    c #BEBEBE",
  305. "|    c #C4C4C4",
  306. "1    c #D8D8D8",
  307. "2    c #CACACA",
  308. "3    c #DBDBDB",
  309. "4    c #DFDFDF",
  310. "5    c #D0D0D0",
  311. "6    c #E3E3E3",
  312. "7    c #D6D6D6",
  313. "8    c #DCDCDC",
  314. "9    c #E7E7E7",
  315. "0    c #E2E2E2",
  316. "a    c #EBEBEB",
  317. "b    c #EFEFEF",
  318. "c    c #F3F3F3",
  319. "d    c #EDEDED",
  320. "e    c #F7F7F7",
  321. "f    c #F9F9F9",
  322. "g    c #FBFBFB",
  323. "W      c #000000",
  324. "WWWWWWWWWWWWWWWWWWWWWWWW",
  325. "WX##XX##XX##XX##XX##XX#W",
  326. "WZ%%ZZ%%ZZ%%ZZ%%ZZ%%ZZ%W",
  327. "W&**&&**&&**&&**&&**&&*W",
  328. "W=--==--==--==--==--==-W",
  329. "W;>>;;>>;;>>;;>>;;>>;;>W",
  330. "W,'',,'',,'',,'',,'',,'W",
  331. "W)!!))!!))!!))!!))!!))!W",
  332. "W~{{~~{{~~{{~~{{~~{{~~{W",
  333. "W]^^]]^^]]^^]]^^]]^^]]^W",
  334. "W/((//((//((//((//((//(W",
  335. "W_::__::__::__::__::__:W",
  336. "W<''<<''<<''<<''<<''<<'W",
  337. "W[}}[[}}[[}}[[}}[[}}[[}W",
  338. "W|11||11||11||11||11||1W",
  339. "W2332233223322332233223W",
  340. "W4554455445544554455445W",
  341. "W6776677667766776677667W",
  342. "W8998899889988998899889W",
  343. "W0aa00aa00aa00aa00aa00aW",
  344. "Wb99bb99bb99bb99bb99bb9W",
  345. "WcddccddccddccddccddccdW",
  346. "WceecceecceecceecceecceW",
  347. "WWWWWWWWWWWWWWWWWWWWWWWW"
  348. ],
  349. [
  350. "24 24 79 1",
  351. "     c None",
  352. ".    c #A0A0A0",
  353. "+    c #727272",
  354. "X    c #A2A2A2",
  355. "#    c #A4A4A4",
  356. "Z    c #7B7B7B",
  357. "%    c #7D7D7D",
  358. "&    c #A8A8A8",
  359. "*    c #A7A7A7",
  360. "=    c #797979",
  361. "-    c #A3A3A3",
  362. ";    c #A6A6A6",
  363. ">    c #808080",
  364. ",    c #848484",
  365. "'    c #AEAEAE",
  366. ")    c #AFAFAF",
  367. "!    c #898989",
  368. "~    c #ACACAC",
  369. "{    c #A9A9A9",
  370. "]    c #ADADAD",
  371. "^    c #8B8B8B",
  372. "/    c #8F8F8F",
  373. "(    c #B6B6B6",
  374. "_    c #B7B7B7",
  375. ":    c #959595",
  376. "<    c #949494",
  377. "[    c #B4B4B4",
  378. "}    c #868686",
  379. "|    c #A5A5A5",
  380. "1    c #ABABAB",
  381. "2    c #909090",
  382. "3    c #B8B8B8",
  383. "4    c #BBBBBB",
  384. "5    c #9E9E9E",
  385. "6    c #C0C0C0",
  386. "7    c #BFBFBF",
  387. "8    c #9A9A9A",
  388. "9    c #828282",
  389. "0    c #B0B0B0",
  390. "a    c #939393",
  391. "b    c #C3C3C3",
  392. "c    c #C7C7C7",
  393. "d    c #8A8A8A",
  394. "e    c #BCBCBC",
  395. "f    c #C1C1C1",
  396. "g    c #AAAAAA",
  397. "h    c #CDCDCD",
  398. "i    c #CFCFCF",
  399. "j    c #CACACA",
  400. "k    c #BABABA",
  401. "l    c #D4D4D4",
  402. "m    c #D6D6D6",
  403. "n    c #C4C4C4",
  404. "o    c #D1D1D1",
  405. "p    c #D2D2D2",
  406. "q    c #D8D8D8",
  407. "r    c #CECECE",
  408. "s    c #DFDFDF",
  409. "t    c #DEDEDE",
  410. "u    c #CCCCCC",
  411. "v    c #B1B1B1",
  412. "w    c #757575",
  413. "x    c #DDDDDD",
  414. "y    c #DADADA",
  415. "z    c #E7E7E7",
  416. "A    c #E6E6E6",
  417. "B    c #E9E9E9",
  418. "C    c #EDEDED",
  419. "D    c #E4E4E4",
  420. "E    c #E2E2E2",
  421. "F    c #C5C5C5",
  422. "G    c #F4F4F4",
  423. "H    c #F3F3F3",
  424. "I    c #EEEEEE",
  425. "J    c #FFFFFF",
  426. "K    c #F7F7F7",
  427. "L    c #DCDCDC",
  428. "M    c #7E7E7E",
  429. "W      c #000000",
  430. "WWWWWWWWWWWWWWWWWWWWWWWW",
  431. "W.++..++X#Z%&*Z=X.++..+W",
  432. "W+..++-;>,')!!'~>Z-.++.W",
  433. "W+..+={]^/(_:<([^}{#++.W",
  434. "W.++|1!2345.67583[!9|.+W",
  435. "W.+=10a87b{~cc{|74ad1#+W",
  436. "W+-{!aefg0hi3_hjg-e(!>-W",
  437. "W+;]28fc[klmnblo[~f42};W",
  438. "WX>^37g[pqjrstjnpug.3v>W",
  439. "W#,/4b0kqxlyzAlhqo0|4[,W",
  440. "WZ'(5{hljlBCzDBEj7hF5a'W",
  441. "W%)_.~imryCGHICArbic.<)W",
  442. "W&!:6c3nszzHJKzLsq3]63!W",
  443. "W*!<7c_btADIKGDytm_~7_!W",
  444. "WZ'(5{hljlBCzDBEj7hF5a'W",
  445. "W=~[8|jonhEALyExnkjb8/~W",
  446. "WX>^37g[pqjrstjnpug.3v>W",
  447. "W.Z}[4-~uo7bqm7kuc-8[]ZW",
  448. "W+-{!aefg0hi3_hjg-e(!>-W",
  449. "W+.#9d(4.|Fc]~Fb.8(09=.W",
  450. "W.++|1!2345.67583[!9|.+W",
  451. "W.++.#>}v[a<3_a/v]>=..+W",
  452. "W+..++-;>,')!!'~>Z-.++.W",
  453. "WWWWWWWWWWWWWWWWWWWWWWWW"
  454. ],
  455. ["24 24 46 1",
  456. "     c None",
  457. ".    c #FFFFFF",
  458. "+    c #FBFBFB",
  459. "X    c #F9F9F9",
  460. "#    c #F3F3F3",
  461. "Z    c #F7F7F7",
  462. "%    c #EDEDED",
  463. "&    c #EFEFEF",
  464. "*    c #E7E7E7",
  465. "=    c #EBEBEB",
  466. "-    c #E2E2E2",
  467. ";    c #DCDCDC",
  468. ">    c #D6D6D6",
  469. ",    c #E3E3E3",
  470. "'    c #DFDFDF",
  471. ")    c #D0D0D0",
  472. "!    c #DBDBDB",
  473. "~    c #CACACA",
  474. "{    c #C4C4C4",
  475. "]    c #D8D8D8",
  476. "^    c #BEBEBE",
  477. "/    c #D3D3D3",
  478. "(    c #CFCFCF",
  479. "_    c #B8B8B8",
  480. ":    c #CCCCCC",
  481. "<    c #B3B3B3",
  482. "[    c #ADADAD",
  483. "}    c #C7C7C7",
  484. "|    c #A7A7A7",
  485. "1    c #C3C3C3",
  486. "2    c #C0C0C0",
  487. "3    c #A1A1A1",
  488. "4    c #BCBCBC",
  489. "5    c #9B9B9B",
  490. "6    c #959595",
  491. "7    c #8F8F8F",
  492. "8    c #B4B4B4",
  493. "9    c #B0B0B0",
  494. "0    c #898989",
  495. "a    c #ACACAC",
  496. "b    c #848484",
  497. "c    c #7E7E7E",
  498. "d    c #A8A8A8",
  499. "e    c #787878",
  500. "f    c #A4A4A4",
  501. "W      c #000000",
  502. "WWWWWWWWWWWWWWWWWWWWWWWW",
  503. "W+XX++XX++XX++XX++XX++XW",
  504. "W#ZZ##ZZ##ZZ##ZZ##ZZ##ZW",
  505. "W%##%%##%%##%%##%%##%%#W",
  506. "W&**&&**&&**&&**&&**&&*W",
  507. "W=--==--==--==--==--==-W",
  508. "W;**;;**;;**;;**;;**;;*W",
  509. "W>,,>>,,>>,,>>,,>>,,>>,W",
  510. "W'))''))''))''))''))'')W",
  511. "W!~~!!~~!!~~!!~~!!~~!!~W",
  512. "W{]]{{]]{{]]{{]]{{]]{{]W",
  513. "W^//^^//^^//^^//^^//^^/W",
  514. "W(__((__((__((__((__((_W",
  515. "W:<<::<<::<<::<<::<<::<W",
  516. "W[}}[[}}[[}}[[}}[[}}[[}W",
  517. "W|11||11||11||11||11||1W",
  518. "W2332233223322332233223W",
  519. "W4554455445544554455445W",
  520. "W6__66__66__66__66__66_W",
  521. "W7887788778877887788778W",
  522. "W9009900990099009900990W",
  523. "WabbaabbaabbaabbaabbaabW",
  524. "WcddccddccddccddccddccdW",
  525. "WWWWWWWWWWWWWWWWWWWWWWWW"
  526. ],
  527. [ "24 24 65 1",
  528. "     c None",
  529. ".    c #CFCFCF",
  530. "+    c #CDCDCD",
  531. "X    c #B3B3B3",
  532. "#    c #AFAFAF",
  533. "Z    c #C7C7C7",
  534. "%    c #C6C6C6",
  535. "&    c #A7A7A7",
  536. "*    c #A4A4A4",
  537. "=    c #C0C0C0",
  538. "-    c #BDBDBD",
  539. ";    c #9B9B9B",
  540. ">    c #989898",
  541. ",    c #B8B8B8",
  542. "'    c #B6B6B6",
  543. ")    c #8F8F8F",
  544. "!    c #8D8D8D",
  545. "~    c #B0B0B0",
  546. "{    c #AEAEAE",
  547. "]    c #848484",
  548. "^    c #808080",
  549. "/    c #A8A8A8",
  550. "(    c #A6A6A6",
  551. "_    c #787878",
  552. ":    c #757575",
  553. "<    c #D2D2D2",
  554. "[    c #B5B5B5",
  555. "}    c #C9C9C9",
  556. "|    c #AAAAAA",
  557. "1    c #C2C2C2",
  558. "2    c #9E9E9E",
  559. "3    c #BABABA",
  560. "4    c #929292",
  561. "5    c #B2B2B2",
  562. "6    c #868686",
  563. "7    c #7B7B7B",
  564. "8    c #BEBEBE",
  565. "9    c #BCBCBC",
  566. "0    c #C1C1C1",
  567. "a    c #D8D8D8",
  568. "b    c #D5D5D5",
  569. "c    c #D9D9D9",
  570. "d    c #CACACA",
  571. "e    c #DFDFDF",
  572. "f    c #DDDDDD",
  573. "g    c #E1E1E1",
  574. "h    c #D6D6D6",
  575. "i    c #D3D3D3",
  576. "j    c #E7E7E7",
  577. "k    c #E5E5E5",
  578. "l    c #E9E9E9",
  579. "m    c #E2E2E2",
  580. "n    c #DEDEDE",
  581. "o    c #E4E4E4",
  582. "p    c #EFEFEF",
  583. "q    c #EDEDED",
  584. "r    c #F1F1F1",
  585. "s    c #EBEBEB",
  586. "t    c #F0F0F0",
  587. "u    c #F7F7F7",
  588. "v    c #F5F5F5",
  589. "w    c #F9F9F9",
  590. "x    c #F6F6F6",
  591. "y    c #FCFCFC",
  592. "W      c #000000",
  593. "WWWWWWWWWWWWWWWWWWWWWWWW",
  594. "W.[X}Z|&1=2;3,4)5~6]|/7W",
  595. "W9.+X#Z%&*=-;>,')!~{]^/W",
  596. "W8<.[X}Z|&1=2;3,4)5~6]|W",
  597. "Wb89.+X#Z%&*=-;>,')!~{]W",
  598. "Wa08<.[X}Z|&1=2;3,4)5~6W",
  599. "WZab89.+X#Z%&*=-;>,')!~W",
  600. "Wdca08<.[X}Z|&1=2;3,4)5W",
  601. "WfdZab89.+X#Z%&*=-;>,')W",
  602. "We+dca08<.[X}Z|&1=2;3,4W",
  603. "WiefdZab89.+X#Z%&*=-;>,W",
  604. "Whge+dca08<.[X}Z|&1=2;3W",
  605. "WkhiefdZab89.+X#Z%&*=-;W",
  606. "Wjchge+dca08<.[X}Z|&1=2W",
  607. "WnjkhiefdZab89.+X#Z%&*=W",
  608. "Wmljchge+dca08<.[X}Z|&1W",
  609. "WqmnjkhiefdZab89.+X#Z%&W",
  610. "Wpomljchge+dca08<.[X}Z|W",
  611. "WspqmnjkhiefdZab89.+X#ZW",
  612. "Wqrpomljchge+dca08<.[X}W",
  613. "WvqspqmnjkhiefdZab89.+XW",
  614. "Wutqrpomljchge+dca08<.[W",
  615. "WxuvqspqmnjkhiefdZab89.W",
  616. "WWWWWWWWWWWWWWWWWWWWWWWW"
  617. ],
  618. [
  619. "24 24 46 1",
  620. "     c None",
  621. ".    c #FFFFFF",
  622. "+    c #FBFBFB",
  623. "X    c #F3F3F3",
  624. "#    c #EDEDED",
  625. "Z    c #EFEFEF",
  626. "%    c #EBEBEB",
  627. "&    c #DCDCDC",
  628. "*    c #D6D6D6",
  629. "=    c #DFDFDF",
  630. "-    c #DBDBDB",
  631. ";    c #C4C4C4",
  632. ">    c #BEBEBE",
  633. ",    c #CFCFCF",
  634. "'    c #CCCCCC",
  635. ")    c #ADADAD",
  636. "!    c #A7A7A7",
  637. "~    c #C0C0C0",
  638. "{    c #BCBCBC",
  639. "]    c #959595",
  640. "^    c #8F8F8F",
  641. "/    c #B0B0B0",
  642. "(    c #ACACAC",
  643. "_    c #7E7E7E",
  644. ":    c #787878",
  645. "<    c #F9F9F9",
  646. "[    c #F7F7F7",
  647. "}    c #E7E7E7",
  648. "|    c #E2E2E2",
  649. "1    c #E3E3E3",
  650. "2    c #D0D0D0",
  651. "3    c #CACACA",
  652. "4    c #D8D8D8",
  653. "5    c #D3D3D3",
  654. "6    c #B8B8B8",
  655. "7    c #B3B3B3",
  656. "8    c #C7C7C7",
  657. "9    c #C3C3C3",
  658. "0    c #A1A1A1",
  659. "a    c #9B9B9B",
  660. "b    c #B4B4B4",
  661. "c    c #898989",
  662. "d    c #848484",
  663. "e    c #A8A8A8",
  664. "f    c #A4A4A4",
  665. "W      c #000000",
  666. "WWWWWWWWWWWWWWWWWWWWWWWW",
  667. "W+X#Z%&*=-;>,')!~{]^/(_W",
  668. "W<[X}|}1234567890a6bcdeW",
  669. "W<[X}|}1234567890a6bcdeW",
  670. "W+X#Z%&*=-;>,')!~{]^/(_W",
  671. "W+X#Z%&*=-;>,')!~{]^/(_W",
  672. "W<[X}|}1234567890a6bcdeW",
  673. "W<[X}|}1234567890a6bcdeW",
  674. "W+X#Z%&*=-;>,')!~{]^/(_W",
  675. "W+X#Z%&*=-;>,')!~{]^/(_W",
  676. "W<[X}|}1234567890a6bcdeW",
  677. "W<[X}|}1234567890a6bcdeW",
  678. "W+X#Z%&*=-;>,')!~{]^/(_W",
  679. "W+X#Z%&*=-;>,')!~{]^/(_W",
  680. "W<[X}|}1234567890a6bcdeW",
  681. "W<[X}|}1234567890a6bcdeW",
  682. "W+X#Z%&*=-;>,')!~{]^/(_W",
  683. "W+X#Z%&*=-;>,')!~{]^/(_W",
  684. "W<[X}|}1234567890a6bcdeW",
  685. "W<[X}|}1234567890a6bcdeW",
  686. "W+X#Z%&*=-;>,')!~{]^/(_W",
  687. "W+X#Z%&*=-;>,')!~{]^/(_W",
  688. "W<[X}|}1234567890a6bcdeW",
  689. "WWWWWWWWWWWWWWWWWWWWWWWW"
  690. ],
  691. [
  692. "24 24 62 1",
  693. "     c None",
  694. ".    c #FFFFFF",
  695. "+    c #FDFDFD",
  696. "X    c #F9F9F9",
  697. "#    c #F6F6F6",
  698. "Z    c #F7F7F7",
  699. "%    c #F5F5F5",
  700. "&    c #EDEDED",
  701. "*    c #EBEBEB",
  702. "=    c #EFEFEF",
  703. "-    c #E2E2E2",
  704. ";    c #DEDEDE",
  705. ">    c #E7E7E7",
  706. ",    c #E5E5E5",
  707. "'    c #D6D6D6",
  708. ")    c #D3D3D3",
  709. "!    c #DFDFDF",
  710. "~    c #DDDDDD",
  711. "{    c #CACACA",
  712. "]    c #C7C7C7",
  713. "^    c #D8D8D8",
  714. "/    c #D5D5D5",
  715. "(    c #BEBEBE",
  716. "_    c #BCBCBC",
  717. ":    c #FBFBFB",
  718. "<    c #F3F3F3",
  719. "[    c #DCDCDC",
  720. "}    c #E3E3E3",
  721. "|    c #D0D0D0",
  722. "1    c #DBDBDB",
  723. "2    c #C4C4C4",
  724. "3    c #B8B8B8",
  725. "4    c #CFCFCF",
  726. "5    c #CDCDCD",
  727. "6    c #CCCCCC",
  728. "7    c #B3B3B3",
  729. "8    c #AFAFAF",
  730. "9    c #ADADAD",
  731. "0    c #C6C6C6",
  732. "a    c #C3C3C3",
  733. "b    c #A7A7A7",
  734. "c    c #A4A4A4",
  735. "d    c #A1A1A1",
  736. "e    c #C0C0C0",
  737. "f    c #BDBDBD",
  738. "g    c #9B9B9B",
  739. "h    c #989898",
  740. "i    c #959595",
  741. "j    c #B6B6B6",
  742. "k    c #B4B4B4",
  743. "l    c #8F8F8F",
  744. "m    c #8D8D8D",
  745. "n    c #898989",
  746. "o    c #B0B0B0",
  747. "p    c #AEAEAE",
  748. "q    c #ACACAC",
  749. "r    c #848484",
  750. "s    c #808080",
  751. "t    c #7E7E7E",
  752. "u    c #A8A8A8",
  753. "v    c #A6A6A6",
  754. "W      c #000000",
  755. "WWWWWWWWWWWWWWWWWWWWWWWW",
  756. "W:#<%<*>&*;[,})|~1]2/)_W",
  757. "W#Z%&*=&-;>,')!~{]^/(_4W",
  758. "W<%<*>&*;[,})|~1]2/)_35W",
  759. "W%&*=&-;>,')!~{]^/(_457W",
  760. "W<*>&*;[,})|~1]2/)_3568W",
  761. "W*=&-;>,')!~{]^/(_4578]W",
  762. "W>&*;[,})|~1]2/)_356890W",
  763. "W&-;>,')!~{]^/(_4578]0bW",
  764. "W*;[,})|~1]2/)_356890acW",
  765. "W;>,')!~{]^/(_4578]0bceW",
  766. "W[,})|~1]2/)_356890acdfW",
  767. "W,')!~{]^/(_4578]0bcefgW",
  768. "W})|~1]2/)_356890acdf_hW",
  769. "W)!~{]^/(_4578]0bcefgh3W",
  770. "W|~1]2/)_356890acdf_hijW",
  771. "W~{]^/(_4578]0bcefgh3jlW",
  772. "W1]2/)_356890acdf_hijkmW",
  773. "W]^/(_4578]0bcefgh3jlmoW",
  774. "W2/)_356890acdf_hijkmnpW",
  775. "W/(_4578]0bcefgh3jlmoprW",
  776. "W)_356890acdf_hijkmnpqsW",
  777. "W_4578]0bcefgh3jlmoprsuW",
  778. "WWWWWWWWWWWWWWWWWWWWWWWW"
  779. ]);
  780.  
  781. ###
  782. # Subroutines 
  783. ###
  784. sub do_fade
  785. {
  786.   my ($image, $drawable) = @_;
  787.   my (@bounds, $mask, $prevBack, $prevFore);
  788.   
  789.   if (!$drawable->is_layer)
  790.     {
  791.       die "$plugin: Cannot operate on anything other than layers\n";
  792.     }
  793.     
  794.   $image->undo_push_group_start;
  795.   @bounds = $image->selection_bounds;
  796.  
  797.   if (!$drawable->has_alpha)
  798.     {
  799.       $drawable->add_alpha;
  800.     }
  801.  
  802.   if ($drawable->mask)
  803.     {
  804.       $mask = $drawable->mask;
  805.     }
  806.   else
  807.     {
  808.       $mask = $drawable->create_mask(ALPHA_MASK);
  809.       $image->add_layer_mask($drawable, $mask);
  810.     }
  811.     
  812.   $prevBack = Palette->get_background;
  813.   $prevFore = Palette->get_foreground;
  814.   Palette->set_background([0,0,0]);
  815.   Palette->set_foreground([255,255,255]);
  816.  
  817.   # Direction Map
  818.   # 0 3 6
  819.   # 1 4 7
  820.   # 2 5 8
  821.  
  822.   # Bounds Map
  823.   # (1,2) (3,2)
  824.   # (1,4) (3,4)
  825.   
  826.   if ($direction==0)
  827.     {
  828.       $mask->blend(FG_BG_RGB, DARKEN_ONLY_MODE, LINEAR, 100.0, 0.0, 
  829.                    REPEAT_NONE, 0, 1, 0.1, 
  830.            $bounds[3], $bounds[4],
  831.            $bounds[1], $bounds[2]);
  832.     }
  833.   elsif ($direction==1)
  834.     {
  835.       $mask->blend(FG_BG_RGB, DARKEN_ONLY_MODE, LINEAR, 100.0, 0.0, 
  836.                    REPEAT_NONE, 0, 1, 0.1, 
  837.            $bounds[3], ($bounds[2]+$bounds[4])/2,
  838.            $bounds[1], ($bounds[2]+$bounds[4])/2);
  839.     
  840.     }
  841.   elsif ($direction==2)
  842.     {
  843.       $mask->blend(FG_BG_RGB, DARKEN_ONLY_MODE, LINEAR, 100.0, 0.0, 
  844.                    REPEAT_NONE, 0, 1, 0.1, 
  845.            $bounds[3], $bounds[2],
  846.            $bounds[1], $bounds[4]);
  847.  
  848.     }
  849.   elsif ($direction==3)
  850.     {
  851.       $mask->blend(FG_BG_RGB, DARKEN_ONLY_MODE, LINEAR, 100.0, 0.0, 
  852.                    REPEAT_NONE, 0, 1, 0.1,
  853.            ($bounds[3]+$bounds[1])/2, $bounds[4],
  854.            ($bounds[3]+$bounds[1])/2, $bounds[2]);
  855.     }
  856.   elsif ($direction==4)
  857.     {
  858.       $mask->blend(FG_BG_RGB, DARKEN_ONLY_MODE, RADIAL, 100.0, 0.0, 
  859.                    REPEAT_NONE, 0, 1, 0.1, 
  860.            ($bounds[1]+$bounds[3])/2, 
  861.            ($bounds[2]+$bounds[4])/2, 
  862.            ($bounds[3]+$bounds[1])/2, $bounds[4]);
  863.  
  864.     }
  865.   elsif ($direction==5)
  866.     {
  867.       $mask->blend(FG_BG_RGB, DARKEN_ONLY_MODE, LINEAR, 100.0, 0.0, 
  868.                    REPEAT_NONE, 0, 1, 0.1, 
  869.            ($bounds[3]+$bounds[1])/2, $bounds[2],
  870.            ($bounds[3]+$bounds[1])/2, $bounds[4]);
  871.     }
  872.   elsif ($direction==6)
  873.     {
  874.       $mask->blend(FG_BG_RGB, DARKEN_ONLY_MODE, LINEAR, 100.0, 0.0, 
  875.                    REPEAT_NONE, 0, 1, 0.1, 
  876.            $bounds[1], $bounds[4],
  877.            $bounds[3], $bounds[2]);
  878.     }
  879.   elsif ($direction==7)
  880.     {
  881.       $mask->blend(FG_BG_RGB, DARKEN_ONLY_MODE, LINEAR, 100.0, 0.0, 
  882.                    REPEAT_NONE, 0, 1, 0.1, 
  883.            $bounds[1], ($bounds[2]+$bounds[4])/2,
  884.            $bounds[3], ($bounds[2]+$bounds[4])/2);
  885.     }
  886.   elsif ($direction==8)
  887.     {
  888.       $mask->blend(FG_BG_RGB, DARKEN_ONLY_MODE, LINEAR, 100.0, 0.0, 
  889.                    REPEAT_NONE, 0, 1, 0.1, 
  890.            $bounds[1], $bounds[2],
  891.            $bounds[3], $bounds[4]);
  892.     }
  893.   if ($direction >=0 && $direction <9)
  894.     {
  895.       $image->remove_layer_mask($drawable, APPLY);
  896.     }
  897.   
  898.   Palette->set_background($prevBack);
  899.   Palette->set_foreground($prevFore);
  900.   $image->undo_push_group_end;
  901. }
  902.  
  903. sub btn_pressed 
  904. {
  905.   my ($widget, $btnIndex) = @_;
  906.   $direction = $btnIndex;
  907. }
  908.  
  909. sub add_pixmap
  910. {
  911.   my ($window, $but, $num) = @_;
  912.   my @tar = @{$arr[$num]};
  913.   my ($pixmap, $mask) = Gtk::Gdk::Pixmap->colormap_create_from_xpm_d(undef,
  914.                         $but->get_colormap,
  915.                         $but->style->bg('normal'), 
  916.             @{$arr[$num]});
  917.   my ($pixmapId) = new Gtk::Pixmap $pixmap, $mask;
  918.   
  919.   $pixmapId->show;
  920.   $but->add($pixmapId);
  921. }
  922.  
  923. sub okCbk
  924. {
  925.   $cancelFlag = 0;
  926.   Gtk->main_quit;
  927.  
  928. sub create_window
  929.   my ($window, $frm, $box1, $hbox, $hsep, $btnTable, $i, $j, $btn);
  930.  
  931.   $window = new Gtk::Window('toplevel');
  932.   $window->set_name("Alpha Fader");
  933.   $window->set_wmclass("Gimp", "AlphaFader");
  934.   
  935.   $window->signal_connect("destroy" => \&Gtk::main_quit);
  936.   $window->signal_connect("delete_event" => \&Gtk::false);
  937.  
  938.   $box1 = new Gtk::VBox(0, 0);
  939.   $box1->set_spacing(2);
  940.   $window->add($box1);
  941.  
  942.   $frm = new Gtk::Frame "Fade Type";
  943.   $frm->set_border_width(6);
  944.   $frm->show;
  945.  
  946.   $box1->pack_start($frm, 1, 1, 0);
  947.   $btnTable = new Gtk::Table(3,3,1);
  948.   $btnTable->set_border_width(6);
  949.   $frm->add($btnTable);
  950.   
  951.   $btn = new Gtk::RadioButton;
  952.   for ($i=0;$i<3;$i++)
  953.     {
  954.       for ($j=0;$j<3;$j++)
  955.         {
  956.        $btn = Gtk::RadioButton->new_from_widget($btn);
  957.        $btn->set_mode(0);
  958.        $btn->signal_connect("clicked", \&btn_pressed, $i*3+$j);
  959.        $btn->show;
  960.        $btnTable->attach_defaults($btn, $i, $i+1, $j, $j+1); 
  961.        add_pixmap($window, $btn, $i*3+$j);
  962.        
  963.        if (Gimp->get_data($plugin) ne "")
  964.          { # if run before, get last data
  965.            if (Gimp->get_data($plugin) == $i*3+$j)
  966.              {
  967.                $btn->clicked;
  968.              }
  969.          }
  970.        else 
  971.          { # first run of plug-in, set first button
  972.            if ($i==0 && $j==0)
  973.              {
  974.            $btn->clicked;
  975.          }
  976.              }
  977.     }
  978.     }
  979.  
  980.   $hsep = new Gtk::HSeparator;
  981.   $box1->pack_start($hsep, 0, 0, 0);
  982.   $hsep->show;
  983.  
  984.   $hbox = new Gtk::HButtonBox;
  985.   $hbox->set_border_width(2);
  986.   $hbox->set_spacing(4);
  987.   $box1->pack_start($hbox, 0, 0, 0);
  988.   $hbox->show;
  989.  
  990.   $btn = new Gtk::Button "OK";
  991.   $btn->can_default(1);
  992.   $btn->signal_connect("clicked" => \&okCbk);
  993.   $btn->show;
  994.   $hbox->pack_start($btn, 0, 0, 0);
  995.   $btn->grab_default;
  996.  
  997.   $btn = new Gtk::Button "Cancel";
  998.   $btn->can_default(1);
  999.   $btn->signal_connect("clicked" => \&Gtk::main_quit);
  1000.   $btn->show;
  1001.   $hbox->pack_start($btn, 0, 0, 0);
  1002.   
  1003.   $btnTable->show;
  1004.   $box1->show;
  1005.   $window->show;
  1006. }
  1007.  
  1008. Gimp::on_run 
  1009. {
  1010.   my ($interactive, $img, $drw);
  1011.   ($interactive, $img, $drw, $direction) = @_;
  1012.  
  1013.   $cancelFlag = 1;
  1014.   if ($interactive==1)
  1015.     { 
  1016.        $cancelFlag = 0;
  1017.     }
  1018.   elsif ($interactive==2)
  1019.     {
  1020.        $direction = Gimp->get_data($plugin); 
  1021.        $cancelFlag = 0;
  1022.     }
  1023.   else
  1024.     {
  1025.       init Gtk;
  1026.       create_window;
  1027.       main Gtk;
  1028.     }
  1029.     
  1030.   # Do the gimply stuff on it
  1031.   if (!$cancelFlag)
  1032.     {
  1033.       do_fade($img, $drw);
  1034.       Gimp->displays_flush;
  1035.       Gimp->set_data($plugin, $direction);
  1036.     }
  1037. };
  1038.  
  1039. Gimp::on_query {
  1040. gimp_install_procedure(
  1041. $plugin, 
  1042. "Fade the alpha channel of a layer from one side to another", 
  1043. "This was written as a slightly useful exercise to test 
  1044. mostly to learn Gtk's excellent perl interface.  It was  
  1045. inspired by a mailing list question that asked how to do 
  1046. exactly what this does, which is fade the alpha from one 
  1047. side to another.", 
  1048. "Seth Burgess", 
  1049. "Seth Burgess", 
  1050. "2000", 
  1051. "<Image>/Image/Alpha/Fade", 
  1052. "*", 
  1053. PLUGIN,  
  1054. [
  1055.  [PDB_INT32, "run_mode", "Interactive, [non-interactive"],  
  1056.  [PDB_IMAGE, "image", "Input image (unused)"],
  1057.  [PDB_DRAWABLE, "drawable", "Input drawable"],
  1058.  [PDB_INT32, "direction", "Direction to fade(0-8)"]
  1059. ],
  1060. [])
  1061. };
  1062.  
  1063. exit main;
  1064.